home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Champak 50
/
Volume 50 - JOGO DISK .iso
/
Games
/
moonstonemadness.swf
/
scripts
/
__Packages
/
SideScroller
/
Layer.as
< prev
next >
Wrap
Text File
|
2007-09-27
|
12KB
|
398 lines
class SideScroller.Layer extends Library.DispatcherBase
{
static var TYPE_STATIC = 1;
static var TYPE_MOVING = 2;
static var METHOD_ORDERED = 1;
static var METHOD_RANDOM = 2;
static var DEPTH_PANEL_MIN = 1;
static var DEPTH_PANEL_MAX = 50000;
static var DEPTH_OBJECT_MIN = 1;
static var DEPTH_OBJECT_MAX = 50000;
static var DEPTH_FRONT_MIN = 55000;
static var DEPTH_FRONT_MAX = 75000;
static var DEPTH_REMOVE_MIN = 100000;
static var DEPTH_REMOVE_MAX = 110000;
static var GROUND_CHECK_MODIFIER = 50;
static var MAX_HEIGHT = 400;
function Layer(__oLayerID, __mcRef, __nLayerType, __nAttachMethod, __oSSInstance)
{
super();
this.mcRef = __mcRef;
this.oSSInstance = __oSSInstance;
this.mcRef.createEmptyMovieClip("mcPanels",1);
this.mcRef.createEmptyMovieClip("mcObjects",2);
this.mcRef.mcPanels.lineStyle(0,0,0);
this.mcRef.mcPanels.lineTo(1,1);
this.mcRef.mcObjects.lineStyle(0,0,0);
this.mcRef.mcObjects.lineTo(1,1);
this.nLayerType = __nLayerType;
this.nAttachMethod = __nAttachMethod;
this.oLayerID = __oLayerID;
this.nNextPanelDepth = SideScroller.Layer.DEPTH_PANEL_MIN;
this.nNextObjectDepth = SideScroller.Layer.DEPTH_OBJECT_MIN;
this.nNextRemoveDepth = SideScroller.Layer.DEPTH_REMOVE_MIN;
this.nNextFrontDepth = SideScroller.Layer.DEPTH_FRONT_MIN;
if(this.nLayerType == SideScroller.Layer.TYPE_STATIC)
{
this.nParalaxRatioX = 0;
this.nParalaxRatioY = 0;
}
else
{
this.nParalaxRatioX = 1;
this.nParalaxRatioY = 1;
}
this.nOverLap = 0;
this.bFirstPanel = true;
this.aPanelsLinkages = new Array();
this.aPanelsVisual = new Array();
this.aObjects = new Array();
this.nFloorHeight = Infinity;
this.oSSInstance.doAddListener(this);
}
function doEnterFrame()
{
super.doEnterFrame();
if(this.nLayerType == SideScroller.Layer.TYPE_MOVING)
{
this.doCheckLooping();
}
}
function setOverlap(__n)
{
this.nOverLap = __n;
}
function doAddPanelLinkage(sLinkage)
{
this.aPanelsLinkages.push(sLinkage);
if(this.bFirstPanel)
{
this.doAddPanel();
this.bFirstPanel = false;
}
}
function doAddPanelLinkageSet(aPanelsLinkagesLinkage)
{
var _loc2_ = undefined;
_loc2_ = 0;
while(_loc2_ <= aPanelsLinkagesLinkage.length - 1)
{
this.doAddPanelLinkage(aPanelsLinkagesLinkage[_loc2_]);
_loc2_ = _loc2_ + 1;
}
}
function doAttachVisual(__sLinkage)
{
do
{
this.nNextObjectDepth = this.nNextObjectDepth + 1;
if(this.nNextObjectDepth > SideScroller.Layer.DEPTH_FRONT_MAX)
{
this.nNextObjectDepth = SideScroller.Layer.DEPTH_FRONT_MIN;
}
}
while(this.mcRef.mcObjects.getInstanceAtDepth(this.nNextObjectDepth) != undefined);
var _loc2_ = this.mcRef.mcObjects.attachMovie(__sLinkage,"mcObject_" + __sLinkage + "_" + this.nNextObjectDepth,this.nNextObjectDepth);
return _loc2_;
}
function doPutInFront(__mc)
{
do
{
this.nNextFrontDepth = this.nNextFrontDepth + 1;
if(this.nNextFrontDepth > SideScroller.Layer.DEPTH_FRONT_MAX)
{
this.nNextFrontDepth = SideScroller.Layer.DEPTH_FRONT_MIN;
}
}
while(__mc._parent.getInstanceAtDepth(this.nNextFrontDepth) != undefined);
__mc.swapDepths(this.nNextFrontDepth);
}
function doAddObject(__oObject)
{
this.aObjects.push(__oObject);
}
function doRemoveObject(__oObject)
{
if(this.aObjects.length > 0)
{
for(var _loc3_ in this.aObjects)
{
if(this.aObjects[_loc3_] == __oObject)
{
delete this.aObjects[_loc3_];
this.aObjects.splice(Number(_loc3_),1);
}
}
}
}
function getCollidableObjects(__oRequester)
{
var _loc9_ = new Array();
var _loc7_ = __oRequester.__get__Coord();
var _loc3_ = undefined;
_loc3_ = 0;
while(_loc3_ <= this.aObjects.length - 1)
{
if(this.aObjects[_loc3_] != __oRequester)
{
var _loc2_ = this.aObjects[_loc3_];
if(_loc2_.__get__Hitable() && _loc2_.__get__ObjectBlock())
{
var _loc4_ = _loc2_.__get__Coord();
var _loc5_ = Library.Utils.MoreMath.getDistance(_loc4_.x,_loc4_.y,_loc7_.x,_loc7_.y);
var _loc6_ = _loc2_.__get__HitDistance() + __oRequester.__get__HitDistance();
if(Math.abs(_loc5_) <= _loc6_)
{
_loc9_.push(_loc2_);
}
}
}
_loc3_ = _loc3_ + 1;
}
return _loc9_;
}
function getGroundObjects(__oRequester)
{
var _loc4_ = new Array();
var _loc2_ = undefined;
_loc2_ = 0;
while(_loc2_ <= this.aObjects.length - 1)
{
if(this.aObjects[_loc2_] != __oRequester)
{
var _loc3_ = this.aObjects[_loc2_];
if(_loc3_.__get__GroundModifier())
{
_loc4_.push(_loc3_);
}
}
_loc2_ = _loc2_ + 1;
}
return _loc4_;
}
function getSpecialObjects(__oRequester)
{
var _loc9_ = new Array();
var _loc7_ = __oRequester.__get__Coord();
var _loc3_ = undefined;
_loc3_ = 0;
while(_loc3_ <= this.aObjects.length - 1)
{
if(this.aObjects[_loc3_] != __oRequester)
{
var _loc2_ = this.aObjects[_loc3_];
if(_loc2_.__get__Hitable() && _loc2_.__get__ObjectSpecial())
{
var _loc4_ = _loc2_.__get__Coord();
var _loc5_ = Library.Utils.MoreMath.getDistance(_loc4_.x,_loc4_.y,_loc7_.x,_loc7_.y);
var _loc6_ = _loc2_.__get__HitDistance() + __oRequester.__get__HitDistance();
if(Math.abs(_loc5_) <= _loc6_)
{
_loc9_.push(_loc2_);
}
}
}
_loc3_ = _loc3_ + 1;
}
return _loc9_;
}
function getFloorAt(__nPositionX, __nPositionY, __oRequester)
{
var _loc5_ = this.nFloorHeight;
var _loc7_ = new Array();
var _loc10_ = this.getGroundObjects(SideScroller.BasicObject(__oRequester));
var _loc2_ = undefined;
_loc2_ = 0;
while(_loc2_ <= _loc10_.length - 1)
{
var _loc6_ = _loc10_[_loc2_].GroundObject;
if(_loc6_.StartPos <= __nPositionX && _loc6_.EndPos >= __nPositionX)
{
if(_loc6_ instanceof SideScroller.Ground)
{
var _loc4_ = _loc6_.getGroundAt(__nPositionX);
var _loc3_ = true;
if(_loc4_ > _loc5_)
{
_loc3_ = false;
}
else if(__oRequester.__get__Speeds().y < 0)
{
_loc3_ = false;
}
else if(_loc4_ < __nPositionY - __oRequester.__get__CliffClimbCapacity() - __oRequester.__get__Speeds().y)
{
_loc3_ = false;
}
if(_loc3_)
{
_loc5_ = _loc4_;
}
}
else if(_loc6_ instanceof SideScroller.NegativeGround)
{
_loc7_.push(_loc6_);
}
}
_loc2_ = _loc2_ + 1;
}
if(_loc5_ == this.nFloorHeight)
{
_loc2_ = 0;
while(_loc2_ <= _loc7_.length - 1)
{
_loc6_ = _loc7_[_loc2_];
if(_loc6_.getGroundAt() > _loc5_)
{
_loc5_ = _loc6_.getGroundAt();
}
_loc2_ = _loc2_ + 1;
}
}
return _loc5_;
}
function doMoveTo(__nX, __nY)
{
this.mcRef._x = __nX * this.nParalaxRatioX;
this.mcRef._y = __nY * this.nParalaxRatioY;
}
function getRemoveDepth(__mc)
{
do
{
this.nNextRemoveDepth = this.nNextRemoveDepth + 1;
if(this.nNextRemoveDepth > SideScroller.Layer.DEPTH_REMOVE_MAX)
{
this.nNextRemoveDepth = SideScroller.Layer.DEPTH_REMOVE_MIN;
}
}
while(__mc._parent.getInstanceAtDepth(this.nNextRemoveDepth) != undefined);
return this.nNextRemoveDepth;
}
function doDestroy()
{
this.oSSInstance.doRemoveListener(this);
for(var _loc3_ in this.aPanelsVisual)
{
this.doRemoveObjectsIn(this.aPanelsVisual[_loc3_]);
}
for(_loc3_ in this.aObjects)
{
this.aObjects[_loc3_].doDestroy();
}
delete this.aPanelsVisual;
delete this.aObjects;
delete this.oSSInstance;
this.mcRef.swapDepths(this.getRemoveDepth(this.mcRef));
this.mcRef.removeMovieClip();
delete this.mcRef;
super.doDestroy();
}
function get AllObjects()
{
return Library.Utils.Tools.doCopyArray(this.aObjects);
}
function get Id()
{
return this.oLayerID;
}
function get PanelsWidth()
{
return this.mcRef.mcPanels._width;
}
function get PanelsHeight()
{
return Math.min(this.mcRef.mcPanels._height,SideScroller.Layer.MAX_HEIGHT);
}
function get PanelsRef()
{
return this.__get__Ref().mcPanels;
}
function get Ref()
{
return this.mcRef;
}
function set ParalaxRatioX(__nParalaxRatioX)
{
this.nParalaxRatioX = __nParalaxRatioX;
}
function set ParalaxRatioY(__nParalaxRatioY)
{
this.nParalaxRatioY = __nParalaxRatioY;
}
function set BaseFloor(__nFloorHeight)
{
this.nFloorHeight = __nFloorHeight;
}
function doCheckLooping()
{
var _loc2_ = this.__get__PanelsWidth() + this.mcRef._x;
if(_loc2_ <= this.oSSInstance.__get__StageWidth() + SideScroller.SideScrollerManager.LOOP_BUFFER)
{
this.doAddPanel(this.__get__PanelsWidth());
}
this.doCheckForPanelRemoval();
}
function doAddPanel(__nPosition)
{
var _loc3_ = undefined;
var _loc2_ = undefined;
switch(this.nAttachMethod)
{
case SideScroller.Layer.METHOD_ORDERED:
if(this.aPanelsLinkages.length > 0)
{
_loc3_ = String(this.aPanelsLinkages.shift());
_loc2_ = true;
}
else
{
_loc2_ = false;
}
break;
case SideScroller.Layer.METHOD_RANDOM:
var _loc5_ = Library.Utils.MoreMath.getRandomRange(0,this.aPanelsLinkages.length - 1);
_loc3_ = this.aPanelsLinkages[_loc5_];
_loc2_ = true;
}
if(_loc2_)
{
var _loc4_ = this.mcRef.mcPanels.attachMovie(_loc3_,"mcPanel" + this.nNextPanelDepth,this.nNextPanelDepth);
_loc4_._x = __nPosition - this.nOverLap;
this.aPanelsVisual.push(_loc4_);
this.nNextPanelDepth = this.nNextPanelDepth + 1;
if(this.nNextPanelDepth > SideScroller.Layer.DEPTH_PANEL_MAX)
{
this.nNextPanelDepth = SideScroller.Layer.DEPTH_PANEL_MIN;
}
}
}
function doRemoveObjectsIn(__mcContainer)
{
var _loc2_ = undefined;
for(_loc2_ in this.aObjects)
{
if(String(this.aObjects[_loc2_].Ref).indexOf(String(__mcContainer)) != -1)
{
this.aObjects[_loc2_].doDestroy();
}
}
}
function doCheckForPanelRemoval()
{
var _loc2_ = this.aPanelsVisual[0];
var _loc3_ = undefined;
_loc3_ = _loc2_._x + _loc2_._width + this.mcRef._x;
if(_loc3_ < - SideScroller.SideScrollerManager.LOOP_BUFFER)
{
this.doRemoveObjectsIn(_loc2_);
_loc2_.removeMovieClip();
this.aPanelsVisual.shift();
}
}
}